class Carro
	attr_reader :marca, :modelo;
	def initialize(marca, modelo)
	   @marca = marca || "Volkswagem";
	   @modelo = modelo || "Polo";
	end
	def to_s
	   return "#{@marca} - #{@modelo}";
	end
end

class Garagem
	attr_reader :carros;
	def initialize(*carros)
		@carros = [];
		if carros
			carros.each do |carro|
				insere_carro(carro);
			end
		end
	end
	def insere_carro(carro)
		@carros.push(carro);
	end
	def carro_por_modelo(modelo)
		@carros.each do |carro|
			if carro.modelo == modelo
				@carros = @carros - [carro];
				return carro;
			end
		end
	end
	def carros_por_marca(marca)
	   carros = [];
	   @carros.each do |carro|
		   if carro.marca == marca
			   carros.push carro;
		   end
	   end
	   return carros;
	end
	def to_s
		string = "";
		@carros.each do |carro|
			string += carro.to_s + "\n";
		end
		return string;
	end
end

class Montadora
	attr_reader :marca;
	@@carros_produzidos = 0;
	def initialize(marca)
	   @marca = marca;
	end
	def monta_carro(modelo)
	   carro = Carro::new(@marca, modelo);
	   @@carros_produzidos += 1;
	   return carro;
	end
	def method_missing(metodo)
	   metodo = metodo.to_s;
	   if metodo.include? "monta_";
		   modelo = metodo.gsub(/monta_/, "");
		   carro = monta_carro(modelo);
		   return carro;
	   end
	end
	def self.carros_produzidos
	   return @@carros_produzidos;
	end
end

volks = Montadora::new "Volkswagem";
polo = volks.monta_carro "Polo";
gol = volks.monta_Gol;
garagem = Garagem::new(gol, polo);
puts garagem.to_s
polo = garagem.carro_por_modelo "Polo";
puts "\n--\n"+garagem.to_s;
